home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Deutsche Edition 1
/
Deutsche Edition 1.iso
/
amok
/
041-050
/
amok45
/
crypto
/
coder.mod
< prev
next >
Wrap
Text File
|
1993-11-04
|
3KB
|
122 lines
(*-----------------------------------------------------------------------------
:Program. Coder
:Author Klemens Meyer
:Address. Sievershauser Str 3 3154 Edemissen/Oelerse
:Copyright. Public Domain
:Language. MODULA 2
:Translator. M2Amiga V3.2d A+L
:History. V 1.0 [Meyer] 19.06.89
:Contents. Das Programm codiert eine beliebige Datei mit einem
:Contents. beliebig langen Schlüssel.
:Usage. Im CLI: Coder <FILE> <CODE>
-----------------------------------------------------------------------------*)
MODULE Coder;
FROM SYSTEM IMPORT
CAST;
FROM Arts IMPORT
TermProcedure,Terminate;
FROM Arguments IMPORT
NumArgs,GetArg;
FROM FileSystem IMPORT
File,Response,
Lookup,Close,ReadChar,WriteChar;
FROM InOut IMPORT
Write,WriteString,WriteLn;
FROM Str IMPORT
Concat,Length;
TYPE Byte = [0..7];
ByteSet = SET OF Byte;
String = ARRAY [0..80] OF CHAR;
VAR txt,cde : File;
len : INTEGER;
file,code : String;
PROCEDURE XOr (x,y : CHAR) : CHAR;
(* :Input. zwei ASCII-Characters
:Result. ASCII-Character
:Semantic. Verknüpft die Chars bitweise Exklusiv-Oder *)
BEGIN
RETURN CAST(CHAR,CAST(ByteSet,x)/CAST(ByteSet,y));
END XOr;
PROCEDURE CloseAll;
(* :Semantic. Abschlußprozedur. Schließt Ein- und Ausgabefile. *)
BEGIN
Close (txt);
Close (cde);
END CloseAll;
PROCEDURE Kodiere (VAR code : ARRAY OF CHAR);
(* :Input. Schlüssel
:Semantic. kodiert Das File nach dem übergebenen Schlüssel.
:Semantic. Dabei wird das gelesene Zeichen aus der Datei mit einem
:Semantic. Zeichen des Schlüssels XOr - Verknüpft, und in die Ausgabe-
:Semantic. datei geschrieben. Dann wird das nächste Zeichen aus der Datei
:Semantic. gelesen und mit dem nächsten Zeichen des Schlüssels verknüpft.
:Semantic. Wurde das letzte Zeichen des Schlüssels benutzt fährt die Pro-
:Semantic. zedur mit dem ersten Zeichen fort. *)
VAR c : CHAR;
i,l : INTEGER;
BEGIN
l:=Length (code);i:=l;
LOOP
INC(i);IF i>=l THEN i:=0 END;
ReadChar (txt,c);
IF txt.eof THEN EXIT END;
c:=XOr(c,code[i]);
WriteChar(cde,c);
END; (* LOOP *)
END Kodiere;
BEGIN (* MAIN *)
IF NumArgs()#2 THEN
WriteString ("Usage: Coder <FILE> <CODE>");WriteLn;
Terminate(0);
END; (* IF *)
TermProcedure (CloseAll);
GetArg(1,file,len);
Lookup (txt,file,8196,FALSE);
WriteString ("Lesefile: ");WriteString(file);
IF txt.res#done THEN
WriteString (" konnte nicht geöffnet werden!");WriteLn;
Terminate(0);
END; (* IF *)
WriteLn;
Concat (file,".cd");
Lookup (cde,file,8196,TRUE);
WriteString ("Schreibfile: ");WriteString (file);
IF cde.res#done THEN
WriteString (" konnte nicht geöffnet werden!");WriteLn;
Terminate(0);
END; (* IF *)
WriteLn;
GetArg(2,code,len);
Kodiere (code);
WriteString ("Kodierung beendet.");WriteLn;
END Coder.